#include<bits/stdc++.h>
#define int long long
using namespace std;
main(){
  freopen("diyiti.in","r",stdin);
  freopen("diyiti.out","w",stdout);
  ios::sync_with_stdio(false);
  int n,k,r=0; cin>>n>>k;
  map<int,int> h;
  vector<int> a(n);
  for(auto &i:a)cin>>i,h[i]++;
  for(auto i:h)
    if(i.second>k)cout<<"-1\n",exit(0);
  sort(a.begin(),a.end());
  vector<vector<int> > s(k);
  /*if(n<=15){
    vector<int> v,w; r=2e9;
    for(int i=0;i<1<<n;i++)
      if(__builtin_popcount(i)==n/k){
        set<int> s;
        for(int j=0;j<n;j++)
          if(i>>j&1)s.emplace(a[j]);
        if(s.size()==n/k)v.emplace_back(i);
      }
    function<void(int,int,int)> dfs=[&](int x,int S,int c){
      if(x==k-1){
        int i=(1<<n)-1^S,mx=-2e9,mn=2e9;
        for(int j=0;j<n;j++)
          if(i>>j&1)mx=max(mx,a[j]),mn=min(mn,a[j]);
        r=min(r,c+mx-mn); return;
      }
      for(int i:v)
        if(!(S&i)){
          int mx=-2e9,mn=2e9;
          for(int j=0;j<n;j++)
            if(i>>j&1)mx=max(mx,a[j]),mn=min(mn,a[j]);
          w.emplace_back(i),dfs(x+1,S|i,c+mx-mn),w.pop_back();
        }
    };
    dfs(0,0,0);
    cout<<r<<endl;
    return 0;
  }*/
  vector<multiset<int> > m(k);
  for(int i=0;i<n;i+=n/k)
    for(int j=i;j<i+n/k;j++)
      s[i/(n/k)].emplace_back(a[j]),
      m[i/(n/k)].emplace(a[j]);
  auto S=[&](int i,int j,int l,int e){
    m[i].erase(m[i].find(s[i][j]));
    m[i].emplace(s[l][e]);
    m[l].erase(m[l].find(s[l][e]));
    m[l].emplace(s[i][j]);
    swap(s[l][e],s[i][j]);
    sort(s[l].begin(),s[l].end());
    sort(s[i].begin(),s[i].end());
  };
  for(int i=k-1;~i;i--){
    while(1){
      bool b=true;
      for(int j=1;j<n/k;j++)
        if(s[i][j]==s[i][j-1]){
          b=false;
          int R=2e9,L=-1,E=-1,D=-2e9;
          for(int l=i-1;~l;l--)
            for(int e=n/k-1;~e;e--)
              if(m[i].find(s[l][e])==m[i].end()){
                int w=max(s[i][0]-s[l][e],0ll)
                  +max(s[l][e]-s[i].back(),0ll);
                if(w<R||w==R&&s[l][e]>D)
                  R=w,L=l,E=e,D=s[l][e];
              }
          if(~L){S(i,j,L,E); break;}
          D=2e9; for(int l=i+1;l<k;l++)
            if(m[l].find(s[i][j])==m[l].end())
              for(int e=0;e<n/k;e++)
                if(m[i].find(s[l][e])==m[i].end()){
                  int w=max(s[l][0]-s[i][j],0ll)
                    +max(s[i][j]-s[l].back(),0ll)
                    +max(s[i][0]-s[l][e],0ll)
                    +max(s[l][e]-s[i].back(),0ll);
                  if(w<R||w==R&&s[l][e]<D)
                    R=w,L=l,E=e,D=s[l][e];
                }
          S(i,j,L,E); break;
        }
      if(b)break;
    }
  }
  for(auto v:s)r+=v.back()-v[0];
  cout<<r<<endl;
  return 0;
}